import sys
import os
# 添加项目根目录到系统路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

import json
from typing import Dict, Any
from datetime import datetime
from common.train_dict import classify_problem, get_dict_name  # 导入字典查询函数
from common.person_dict import process_persons_list  # 导入人员字典处理模块

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
EXPORT_DIR = os.path.join(BASE_DIR, "export")
RESULT_PATH = os.path.join(EXPORT_DIR, "net_result.txt")
# POSITION_PATH = os.path.join(EXPORT_DIR, "net_position.json") # 注释掉

def format_workflow_output(output: str) -> str:
    """
    格式化工作流输出，使其更易读
    
    Args:
        output: 原始工作流输出字符串
    
    Returns:
        格式化后的字符串
    """
    try:
        # 按换行符分割
        lines = output.split('\n')
        formatted_lines = []
        current_section = None
        
        for line in lines:
            line = line.strip()
            if not line:
                continue
                
            # 检查是否是新的部分
            if line.endswith(':'):
                if current_section:
                    formatted_lines.append('')  # 在部分之间添加空行
                current_section = line
                formatted_lines.append(f"【{line}】")  # 添加部分标题
            else:
                # 处理数组格式
                if line.startswith('[') and line.endswith(']'):
                    items = line[1:-1].split(',')
                    for item in items:
                        item = item.strip().strip("'")
                        if item:
                            formatted_lines.append(f"    - {item}")
                else:
                    formatted_lines.append(f"    {line}")
        
        return '\n'.join(formatted_lines)
    except Exception as e:
        print(f"格式化工作流输出时发生错误: {str(e)}")
        return output

def save_workflow_result(workflow_output: str, processed_result: Dict[str, Any], processing_time: float, bh: str, workflow_input: Dict[str, Any]) -> None:
    """
    保存工作流处理结果到txt文件
    
    Args:
        workflow_output: 工作流原始输出
        processed_result: process_workflow_output 处理后的结果
        processing_time: 工作流处理时间（秒）
        bh: 信访件编号
        workflow_input: 工作流输入数据
    """
    try:
        # 确保export目录存在
        os.makedirs(EXPORT_DIR, exist_ok=True)
        
        # 格式化工作流输出
        formatted_output = format_workflow_output(workflow_output)
        
        # 准备要保存的数据
        result_data = {
            "处理时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "信访件编号": bh,
            "工作流处理耗时": f"{processing_time:.2f}秒",
            "工作流输入": workflow_input,
            "工作流原始输出": formatted_output,
            "处理后的结果": processed_result
        }
        
        # 将数据转换为格式化的JSON字符串，确保工作流原始输出保持格式
        formatted_data = json.dumps(result_data, ensure_ascii=False, indent=2)
        
        # 处理工作流原始输出的格式
        formatted_data = formatted_data.replace('\\n', '\n')  # 将\n转换为实际的换行
        formatted_data = formatted_data.replace('\\"', '"')   # 处理转义的引号
        
        # 追加写入到文件
        with open(RESULT_PATH, "a", encoding="utf-8") as f:
            f.write(f"\n{'='*50}\n")
            f.write(f"{formatted_data}\n")
        
        print("工作流处理结果已保存到net_result.txt")
            
    except Exception as e:
        print(f"保存工作流处理结果时发生错误: {str(e)}")
        raise

# 注释掉原有的保存方
# def get_last_position() -> dict: # 注释掉
#     """获取上次处理的位置信息"""
#     try: # 注释掉
#         if os.path.exists(POSITION_PATH): # 注释掉
#             with open(POSITION_PATH, "r", encoding="utf-8") as f: # 注释掉
#                 data = json.load(f) # 注释掉
#                 return data # 注释掉
#         return { # 注释掉
#             "last_position": 0, # 注释掉
#             "file_name": "", # 注释掉
#             "last_bh": "", # 注释掉
#             "last_process_time": "" # 注释掉
#         } # 注释掉
#     except Exception as e: # 注释掉
#         print(f"读取位置记录时发生错误: {str(e)}") # 注释掉
#         return { # 注释掉
#             "last_position": 0, # 注释掉
#             "file_name": "", # 注释掉
#             "last_bh": "", # 注释掉
#             "last_process_time": "" # 注释掉
#         } # 注释掉

# def save_position(position: int, file_name: str, bh: str) -> None: # 注释掉
#     """保存处理位置信息"""
#     try: # 注释掉
#         os.makedirs(EXPORT_DIR, exist_ok=True) # 注释掉
#         position_data = { # 注释掉
#             "last_position": position, # 注释掉
#             "file_name": file_name, # 注释掉
#             "last_bh": bh, # 注释掉
#             "last_process_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 注释掉
#         } # 注释掉
#         with open(POSITION_PATH, "w", encoding="utf-8") as f: # 注释掉
#             json.dump(position_data, f, ensure_ascii=False, indent=2) # 注释掉
#     except Exception as e: # 注释掉
#         print(f"保存位置记录时发生错误: {str(e)}") # 注释掉

def save_to_txt(data: Dict[str, Any], case_intruction: str, current_position: int, file_name: str) -> None:
    """
    将网络信访件处理结果保存到txt文件
    
    Args:
        data: API返回的数据字典
        case_intruction: 信访件内容
        current_position: 当前处理的位置
        file_name: 处理的文件名
    """
    try:
        # 确保export目录存在
        os.makedirs(EXPORT_DIR, exist_ok=True)
        
        # 获取上次处理的位置信息
        # last_position_info = get_last_position() # 注释掉
        # print(f"上次处理信息: {json.dumps(last_position_info, ensure_ascii=False, indent=2)}") # 注释掉
        
        # 判断是否与上次处理的文件一致
        # if last_position_info["file_name"] == file_name: # 注释掉
        #     # 如果文件名一致，检查位置 # 注释掉
        #     if current_position <= last_position_info["last_position"]: # 注释掉
        #         print(f"当前位置 {current_position} 小于等于上次处理位置 {last_position_info['last_position']}，跳过保存") # 注释掉
        #         return # 注释掉
        # else: # 注释掉
        #     print(f"文件名不一致或首次处理，从头开始处理") # 注释掉
        #     # 如果是新文件，重置位置信息 # 注释掉
        #     last_position_info = { # 注释掉
        #         "last_position": 0, # 注释掉
        #         "file_name": file_name, # 注释掉
        #         "last_bh": "", # 注释掉
        #         "last_process_time": "" # 注释掉
        #     } # 注释掉
        
        
        # 处理被反映人信息，将英文字段名转换为中文
        if data["bfyrs"]:
            for bfyr in data["bfyrs"]:
                bfyr["姓名"] = bfyr.pop("mc", "")
                bfyr["职级"] = bfyr.pop("zj", "")
                bfyr["职务"] = bfyr.pop("zw", "")
                bfyr["单位或地址"] = bfyr.pop("dwhdz", "")
                bfyr["干部管理权限"] = bfyr.pop("gbglqx", "")
                if "dxlx" in bfyr:
                    bfyr["对象类型"] = bfyr.pop("dxlx", "")
                if "jddx" in bfyr:
                    bfyr["监督对象"] = bfyr.pop("jddx", "")
                if "jjjcgb" in bfyr:
                    bfyr["纪检监察干部"] = bfyr.pop("jjjcgb", "")
                if "jgdwlb" in bfyr:
                    bfyr["机关单位类别"] = bfyr.pop("jgdwlb", "")
                if "IdCard" in bfyr:
                    bfyr["证件号码"] = bfyr.pop("IdCard", "")
                if "zzmm" in bfyr:
                    bfyr["政治面貌"] = bfyr.pop("zzmm", "")
        
        # 准备要保存的数据
        result_data = {
            "信访件编号": data["bh"],
            "原件描述": case_intruction,
            "信访举报类别": data["xflb"],
            "问题摘要": data["wtxx"]["wtzy"],
            "问题分类": data["wtxx"]["fl"],
            "统一关键字": data["wtxx"]["tygjz"],
            "自定义关键字": data["wtxx"]["zdygjz"],
            "扬言": data["wtxx"]["bs"]["yy"],
            "省管干部": data["wtxx"]["bs"]["sggb"],
            "是否重复": data["wtxx"]["bs"]["sfcf"],
            "被反映人信息": data["bfyrs"]
        }
        
        # 将数据转换为格式化的JSON字符串
        formatted_data = json.dumps(result_data, ensure_ascii=False, indent=2)
        
        # 追加写入到文件
        with open(RESULT_PATH, "a", encoding="utf-8") as f:
            f.write(f"\n{'='*50}\n")
            f.write(f"处理时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
            f.write(f"处理位置: {current_position}\n")
            f.write(f"文件名: {file_name}\n")
            f.write(f"{formatted_data}\n")
        
        print(f"数据已保存到wangluo_result.txt，文件名: {file_name}")
        
        # 保存当前处理位置
        # save_position(current_position, file_name, data["bh"]) # 注释掉
            
    except Exception as e:
        print(f"保存txt时发生错误: {str(e)}")
        raise

if __name__ == "__main__":
    # 测试数据
    test_data = {
        "bh": "test_bh",
        "xflb": "1",
        "wtxx": {
            "wtzy": "测试问题摘要",
            "fl": ["01031804", "010607"],
            "tygjz": ["15", "3"],
            "zdygjz": ["ldgbpo", "gcxmjs"],
            "bs": {
                "yy": [],
                "sggb": ["李强"],
                "sfcf": "1"
            }
        },
        "fyrs": [
            {
                "mc": "李晓梅",
                "zw": "无"
            }
        ],
        "bfyrs": [
            {
                "mc": "王建国",
                "zw": "清远市建设局局长",
                "dwhdz": "清远市海淀区长安大街66号",
                "zj": "6",
                "gbglqx": "4"
            }
        ]
    }
    
    # 测试保存功能
    test_case = "第一行内容\n第二行内容\n第三行内容"
    save_to_txt(test_data, test_case, 0, "test_case") 